package ch02.LL_K_Parser;

import ch02.LL_1_Lexer.Token;

/**
 * 记录词法解析器状态所必须的字段
 */

public class Lexer {
    public static final char EOF = (char)-1;            //EOF字符，表示文件的结尾
    public static final int EOF_TYPE = 1;               //表示EOF词法类型
    String input;   //输入字符串
    int p = 0;      //当前输入字符的下标
    char c;         //当前字符

    /**
     * 记录输入的字符串，并把第一个字符赋值给向前看字符c
     * @param input
     */
    public Lexer(String input) {
        this.input = input;
        c = input.charAt(p);
    }

    /**
     * 自增字符的下标，并将下一个字符当作向前看字符
     * 另外检测输入字符串是否结束，如果结束，将向前看字符赋值为EOF（-1）
     */
    public void consume() {
        p++;
        if (p >= input.length()) {
            c = EOF;
        } else {
            c = input.charAt(p);
        }
    }


    /**
     * 确保x市输入流中的下一个字符
     * @param x
     */
    public void match(char x) {
        if (c == x) {
            consume();
        } else {
            throw new Error("expecting " + x + "; found " + c);
        }
    }


    public String getTokenName(int x) {
        return null;
    }

    public Token nextToken() {
        return null;
    }
}
